package collection;

import java.util.*;

/**
 * List集合
 * 是一个接口，继承Collection接口
 *
 * List接口的特点
 *      List集合类中元素有序(添加顺序和取出顺序一致)，且可重复
 *      List集合中的每个元素都有其对应的顺序索引，即支持索引
 *      List容器中的元素都对应一个整数型的序号记载其在容器中的位置，可以根据序号存取容器中的元素
 *      JDK API中List接口的实现类非常多，常用的有ArrayList、LinkedList、Vector
 *
 * 特有的方法
 * E get(int index)             获取列表中指定位置的元素
 * E set(int index, E element)  用指定的元素替换列表中指定位置的元素
 * ListIterator<E> listIterator()   返回列表中元素的列表迭代器
 * List<E> subList(int fromIndex，int toIndex)  返回指定fromIndex（包含）和toIndex（不包括）之间的此列表部分的视图。
 *                      返回的列表由此列表支持，因此返回列表中的非结构更改将反映在此列表中，反之亦然
 *
 * jdk8中添加的默认方法
 * default void replaceAll(UnaryOperator <E>运算符)    将此列表的每个元素替换为将运算符应用于该元素的结果
 * default void sort(Comparator <super E> c)        根据指定的Comparator引发的顺序对此列表进行排序
 * default Spliterator <E> spliterator()            在此列表中的元素上创建Spliterator
 *
 *
 * UnaryOperator        一元运算符
 * Comparator           比较器
 *
 *
 *
 * Collections
 * 静态方法
 * static void reverse(List<?> c)     反转List集合
 * */
public class ListDemo {
    public static void main(String[] args) {
        List<String> list = Get.getStringLinkedList();
        System.out.println(list);
        for(int i = 0; i < list.size(); i++)
            System.out.println(list.get(i));
        System.out.println("-----------------");
        ListIterator<String> listIterator = list.listIterator();
        while (listIterator.hasNext()) {
            String str = listIterator.next();
            if (str.equals("rr"))
                listIterator.remove();
            System.out.println(str);
        }
        System.out.println(list);

        List<String> subList = list.subList(2, list.size() - 1);
        System.out.println(subList);
//        subList.sort(new Comparator<String>() {
//            @Override
//            public int compare(String o1, String o2) {
//                return o1.compareTo(o2);
//            }
//        });
//        subList.sort((o1, o2) -> o1.compareTo(o2));
        System.out.println("list: " + list);
        subList.sort(String::compareTo);
        System.out.println("subList: " + subList);
        System.out.println("list: " + list);
        Collections.reverse(list);
        System.out.println("list: " + list);
    }
}
